
#ifndef __GSL_EXT_TESTFUNCTIONS_H__

#include <gsl/gsl_vector.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct
{
  int m;
  int n;
}
gsl_ext_testfunction_params;

typedef struct
{
  const char *name;
  double (*f)(const gsl_vector *x, void *params);
  int n;
  int (*check_params)(const gsl_ext_testfunction_params *p);
}
gsl_ext_testfunction_type;

extern const gsl_ext_testfunction_type *gsl_ext_testfunction_beale;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_biggsexp6;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_box;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_brownbadlyscaled;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_browndennis;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_chebyquad;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_extendedpowellsingular;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_extendedrosenbrock;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_gaussian;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_gulf;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_helicalvalley;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_penaltyfunctionI;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_penaltyfunctionII;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_powellbadlyscaled;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_trigonometric;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_variablydimensioned;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_watson;
extern const gsl_ext_testfunction_type *gsl_ext_testfunction_wood;

int 
gsl_ext_testfunction_check_params(const gsl_ext_testfunction_type *T,
                                  const gsl_ext_testfunction_params *p);

int 
gsl_ext_testfunction_needs_params(const gsl_ext_testfunction_type *T);

const gsl_ext_testfunction_type *
gsl_ext_get_testfunction(char *expr);

#ifdef __cplusplus
}
#endif

#define __GSL_EXT_TESTFUNCTIONS_H__

#endif
